package com.example.leetcode.trainingcamp.week9.sunday;

/**
 * 编写函数，实现许多图片编辑软件都支持的「颜色填充」功能。
 *
 * 待填充的图像用二维数组 image 表示，元素为初始颜色值。初始坐标点的行坐标为 sr 列坐标为 sc。需要填充的新颜色为 newColor 。
 *
 * 「周围区域」是指颜色相同且在上、下、左、右四个方向上存在相连情况的若干元素。
 *
 * 请用新颜色填充初始坐标点的周围区域，并返回填充后的图像。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/color-fill-lcci
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Offer08_10 {

    private boolean[][] b;

    public int[][] floodFill(int[][] image, int sr, int sc, int newColor) {
        int len = image.length;
        int len1 =image[0].length;
        b = new boolean[len][len1];
        int[][] t = {{0,1},{-1,0},{0,-1},{1,0}};
        int temp = image[sr][sc];
        image[sr][sc] = newColor;
        b[sr][sc] = true;
        dfs(image,temp,newColor,sr,sc,t,len,len1);
        return image;
    }

    public void dfs(int[][] image ,int temp,int newColor,int sr,int sc,int[][] t,int row,int col){
        for (int[] ints : t) {
            int r = ints[0] + sr;
            int c = ints[1] + sc;
            if (r >= 0 && r < row && c >= 0 && c < col && !b[r][c] && image[r][c] == temp) {
                image[r][c] = newColor;
                b[r][c] = true;
                dfs(image, temp, newColor, r, c, t, row, col);
            }
        }
    }
}


class TestOffer08_10{
    public static void main(String[] args) {
        int[][] image = {{1,1,1},{1,1,0},{1,0,1}};
        Offer08_10 o = new Offer08_10();
        int sr = 1;
        int sc = 1;
        int[][] ints = o.floodFill(image, sr, sc, 2);
        for (int[] in:ints) {
            for (int i:in) {
                System.out.print(i+" ");
            }
            System.out.println();
        }

    }
}